home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Sample Code / AOCE Sample Code / PowerTalk Access Modules / Sample SMSAM / SampleSMSAM Source / SampleSMSAMServer / DebuggingMenus.cp < prev    next >
Encoding:
Text File  |  1995-07-28  |  14.1 KB  |  650 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        DebuggingMenus.cp
  3.  
  4.     Copyright:    © 1991-1994 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Part of the AOCE Sample SMSAM Package.  Consult the license
  8.     which came with this software for your specific legal rights.
  9.  
  10. */
  11.  
  12.  
  13.  
  14. #ifndef __BLJSTANDARDINCLUDES__
  15. #include "BLJStandardIncludes.h"
  16. #endif
  17.  
  18. #ifndef __EVENTS__
  19. #include <Events.h>
  20. #endif
  21.  
  22. #ifndef __MENUS__
  23. #include <Menus.h>
  24. #endif
  25.  
  26. #ifndef __DESK__
  27. #include <Desk.h>
  28. #endif
  29.  
  30. #ifndef __DEBUGGINGGEAR__
  31. #include "DebuggingGear.h"
  32. #endif
  33.  
  34. #ifndef __DEBUGGINGMENUS__
  35. #include "DebuggingMenus.h"
  36. #endif
  37.  
  38. #ifndef    __DEBUGASSERT__
  39. #include "DebugAssert.h"
  40. #endif
  41.  
  42. #ifndef    __BOVINECONSTANTS__
  43. #include "BovineConstants.h"
  44. #endif
  45.  
  46. #ifndef    __DEBUGCONSTANTS__
  47. #include "DebugConstants.h"
  48. #endif
  49.  
  50. #ifndef    __RESOURCES__
  51. #include "Resources.h"
  52. #endif
  53.  
  54. #ifndef    __DISKLOG__
  55. #include "DiskLog.h"
  56. #endif
  57.  
  58. #ifndef __LETTERLOGWINDOW__
  59. #include "LetterLogWindow.h"
  60. #endif
  61.  
  62. #ifndef __STATUSWINDOW__
  63. #include "StatusWindow.h"
  64. #endif
  65.  
  66. #ifndef __STDIO__
  67. #include <stdio.h>
  68. #endif
  69.  
  70. #ifndef __WRITELINEWINDOW__
  71. #include "WriteLineWindow.h"
  72. #endif
  73.  
  74. #ifndef __TRANSCRIPTWINDOW__
  75. #include "TranscriptWindow.h"
  76. #endif
  77.  
  78. #ifndef __BOVINESERVER__
  79. #include "BovineServer.h"
  80. #endif
  81.  
  82. /***********************************|****************************************/
  83.  
  84. void BreakStr ( const Str255 str );
  85.  
  86. /***********************************|****************************************/
  87.  
  88. unsigned short gCurrentGatewayNumber = 0;
  89. extern void CreateMailGatewayN(short n);
  90. extern class TMailGateway* gMailGateway;
  91.  
  92. #define HighWord(x)    (x >> 16)
  93. #define LowWord(x)    ( x & 0xffff)
  94.  
  95. extern Boolean GetAutostartOption();
  96. extern void ToggleAutostartOption();
  97. extern short    gApplicationFile;
  98. extern TStatusWindow * gStatusWindow;
  99. extern TStatusWindow * gAboutBox;
  100.  
  101. extern TTranscriptWindow * gTranscriptWindow;
  102.  
  103. /***********************************|****************************************/
  104.  
  105. #pragma segment Initialize
  106. void InitializeDebuggingMenus ()
  107. {
  108.     Handle menuBar = GetNewMBar(kMenuBar);        /* read menus into menu bar */
  109.  
  110.     if ( menuBar )
  111.     {
  112.         SetMenuBar(menuBar);                    /* install menus */
  113.         DeallocateHandle(menuBar);
  114.  
  115.         AddResMenu ( GetMHandle ( kAppleMenu ), 'DRVR' );
  116.  
  117.         //    Some debug flags should always be reset to off upon startup.
  118.         debugFlag.SetFlag(1, false);
  119.  
  120.         DrawMenuBar();
  121.     }
  122.     else
  123.     {
  124.         BreakStr ( "\pResources were not properly built!" );
  125.         ExitToShell ();
  126.     }
  127. }
  128.  
  129. /***********************************|****************************************/
  130.  
  131. #pragma segment DebuggingMenus
  132. void DisplayMemoryInfo()
  133. {
  134.     Size freeSize, largestBlock, growSize, stackSpace;
  135.     static Size lastFree = 0, lastLargest = 0;
  136.  
  137.     PurgeMem(maxSize);
  138.     largestBlock = MaxMem(&growSize);
  139.     freeSize = FreeMem();
  140.  
  141.     keith << "\n"
  142.             "===================================================\n"
  143.             "BovineServer Memory/heap information   ";
  144.     {
  145.         unsigned long dateTime;
  146.         Str255 resultStr255;
  147.  
  148.         GetDateTime  (&dateTime);
  149.         IUDateString(dateTime,shortDate, resultStr255);
  150.         keith << resultStr255 << " ";
  151.  
  152.         IUTimeString(dateTime, true, resultStr255);
  153.         keith << resultStr255 << "\n";
  154.     }
  155.  
  156.     keith << " Free mem: " << freeSize << ", Δ" << (long) freeSize - (long) lastFree << "\n";
  157.     keith << " Max mem: " << largestBlock << ", Δ" << (long) largestBlock - (long) lastLargest << "\n";
  158.     keith << " Stack space: " << StackSpace()<< "\n";
  159.     keith << "===================================================\n" << "\n";
  160.  
  161.     lastFree = freeSize;
  162.     lastLargest = largestBlock;
  163. }
  164.  
  165. /***********************************|****************************************/
  166.  
  167. void SetFlagsMenu ( short menuID, TDebugFlag& flag )
  168. {
  169.     MenuHandle menuHandle = GetMHandle ( menuID );
  170.     short count = CountMItems ( menuHandle );
  171.  
  172.     for ( short index = 1; index <= count; index++ )
  173.         CheckItem ( menuHandle, index, flag.Flag ( index ) );
  174. }
  175.  
  176. /***********************************|****************************************/
  177.  
  178. void SetItemEnable ( MenuHandle menuH, short whichItem, Boolean s )
  179. {
  180.     if ( s ) {
  181.         EnableItem ( menuH, whichItem ) ;
  182.     } else
  183.     {
  184.         DisableItem ( menuH, whichItem) ;
  185.     }
  186. }
  187.  
  188. /***********************************|****************************************/
  189.  
  190. void AdjustMenus()
  191. {
  192.     //    If the gateway is paused, then check that menu item
  193.     CheckItem (GetMHandle (kControlMenu), kControlPause, IsGatewayPausing() );
  194. //    CheckItem(GetMHandle (kDebugMenu), kDebugShowMemoryOften, debugFlag.Flag(1));
  195.  
  196.     //    Always disable the Edit menu items
  197.     MenuHandle menuH = GetMHandle(kEditMenu);
  198.     CheckItem(menuH, 1, false);
  199.     CheckItem(menuH, 3, false);
  200.     CheckItem(menuH, 4, false);
  201.     CheckItem(menuH, 5, false);
  202.     CheckItem(menuH, 6, false);
  203.  
  204. #if debug
  205.     //    Do the stuff in the Debug menu
  206.     menuH = GetMHandle(kGatewayMenu);
  207.     CheckItem(menuH, kAutostart2020Item, GetAutostartOption());
  208.  
  209.     // make sure the current gateway item is checked
  210.     static short gLastGatewayNumber = 0;
  211.     if ( gLastGatewayNumber != 0 && gLastGatewayNumber != gCurrentGatewayNumber )
  212.         CheckItem ( menuH, gLastGatewayNumber, false);
  213.     if ( gCurrentGatewayNumber != 0 )
  214.         CheckItem ( menuH, gCurrentGatewayNumber, true);
  215.     gLastGatewayNumber = gCurrentGatewayNumber;
  216.  
  217.     menuH = GetMHandle(kConfigMenu);
  218.     SetItemEnable (menuH, kConfigShowConfig, gMailGateway != nil );
  219.     SetItemEnable (menuH, kConfigShowStatus, gMailGateway != nil );
  220.     SetItemEnable (menuH, kConfigSetConfig, gMailGateway != nil );
  221.  
  222.     //    Set up the 'debug-only' items in the Control menu.
  223.     SetItemEnable ( GetMHandle ( kControlMenu ), kControlShowMemoryInfoOften, false );
  224.     
  225.     SetFlagsMenu ( kKeithMenu, keithFlag );
  226.     SetFlagsMenu ( kSteveMenu, steveFlag );
  227.     SetFlagsMenu ( kChrisMenu, chrisFlag );
  228.     SetFlagsMenu ( kAddressesMenu, addressTypesFlag );
  229. #endif
  230. }
  231.  
  232. /***********************************|****************************************/
  233.  
  234. void ShowAboutDialog ()
  235. {     
  236.     TDialogWindow * aboutBox = new TDialogWindow ( kAboutDialog, kAboutDialog );
  237.  
  238.     //    Get the 'vers' resource, so we can display it in the about box.
  239.  
  240.     short savedResFile = CurResFile();
  241.     UseResFile(gApplicationFile);
  242.     Handle versionResource = Get1Resource ('vers', 1);
  243.     UseResFile (savedResFile);
  244.  
  245.     if (versionResource)
  246.     {
  247.         HLock (versionResource);
  248.         NumVersion    *versionRec = (NumVersion *) *versionResource;
  249.         Str255 versionString;
  250.         short    nonReleaseRevNumber;
  251.  
  252.         char devCode = '?';
  253.         nonReleaseRevNumber = 10 * (versionRec->nonRelRev >> 4) + (versionRec->nonRelRev & 0xF);
  254.         switch (versionRec->stage)
  255.         {
  256.             case developStage:    devCode = 'd'; break;
  257.             case alphaStage: devCode = 'a'; break;
  258.             case betaStage: devCode = 'b'; break;
  259.             case finalStage: devCode = 'f'; break;
  260.         }
  261.  
  262.         versionString[0] = sprintf ((char *) versionString, "* version resource %d.%d.%d%c%d", 
  263.             versionRec->majorRev, 
  264.             versionRec->minorAndBugRev >> 4,
  265.             versionRec->minorAndBugRev & 0xF, 
  266.             devCode,
  267.             nonReleaseRevNumber)
  268.              - 1;
  269.         aboutBox->SetItemText (3, versionString);
  270.         ReleaseResource (versionResource);
  271.     }
  272.      
  273.      aboutBox->SelectWindow();
  274. /*     aboutBox->PoseModally();*/
  275. /*     aboutBox->HideWindow();*/
  276. /*     */
  277. /*    delete aboutBox;*/
  278. }
  279.  
  280. /***********************************|****************************************/
  281.  
  282. //extern void HFSDatabaseTest ();
  283. //extern void RamDatabaseTest ();
  284. //extern void BTreeDatabaseTest ();
  285. extern void BufferTests ();
  286. extern void DiskLogTests ();
  287. extern void RunAllOCEOjectsTests ();
  288. extern void TRStringTests ();
  289. extern void CreationIDTests ();
  290. extern void DirDiscriminatorTests ();
  291. extern void TPathnameTests ();
  292. extern void TRLITests ();
  293. extern void TRecordIDTests ();
  294. extern void ObjectListTests ();
  295. extern void FileOfFilesTests ();
  296. // extern void DecompressTest ();
  297. // extern void CompressTest ();
  298. extern void VirtualFileTests ();
  299. extern void ViewCurrentHeap ();
  300. extern void ViewArchivedHeap ();
  301. extern void ArchiveCurrentHeap ();
  302. extern void CompareCurrentHeapWithArchive ();
  303.  
  304. void HandleChrisMenu ( short item )
  305. {
  306.     switch ( item )
  307.     {
  308.         case kLastChrisDebugFlag + 1:
  309. //            HFSDatabaseTest ();
  310.             break;
  311.  
  312.         case kLastChrisDebugFlag + 2:
  313. //            RamDatabaseTest ();
  314.             break;
  315.  
  316.         case kLastChrisDebugFlag + 3:
  317. //            BTreeDatabaseTest ();
  318.             break;
  319.  
  320.         case kLastChrisDebugFlag + 4:
  321.             DiskLogTests ();
  322.             break;
  323.  
  324.         case kLastChrisDebugFlag + 5:
  325.             TDiskLog::DumpLog ( chris );
  326.             break;
  327.  
  328.         case kLastChrisDebugFlag + 6:
  329.             BufferTests ();
  330.             break;
  331.  
  332.         case kLastChrisDebugFlag + 7:
  333.             #ifndef THINK_CPLUS
  334.             RunAllOCEOjectsTests ();
  335.             #endif
  336.             break;
  337.  
  338.         case kLastChrisDebugFlag + 8:
  339.             FileOfFilesTests ();
  340.             break;
  341.  
  342.         case kLastChrisDebugFlag + 9:
  343.             // CompressTest ();
  344.             break;
  345.  
  346.         case kLastChrisDebugFlag + 10:
  347.             // DecompressTest ();
  348.             break;
  349.  
  350.         case kLastChrisDebugFlag + 11:
  351.             VirtualFileTests ();
  352.             break;
  353.  
  354.         case kLastChrisDebugFlag + 12:
  355.             ViewCurrentHeap ();
  356.             break;
  357.  
  358.         case kLastChrisDebugFlag + 13:
  359.             ViewArchivedHeap ();
  360.             break;
  361.  
  362.         case kLastChrisDebugFlag + 14:
  363.             ArchiveCurrentHeap ();
  364.             break;
  365.  
  366.         case kLastChrisDebugFlag + 15:
  367.             CompareCurrentHeapWithArchive ();
  368.             break;
  369.  
  370.         default:
  371.             chrisFlag.SetFlag ( item, !chrisFlag.Flag ( item ) );
  372.             break;
  373.     }
  374. }
  375.  
  376. /***********************************|****************************************/
  377.  
  378. void HandleGatewayMenu ( short item )
  379. {
  380.     switch ( item )
  381.     {
  382.         case k2020ConnectorItem:
  383.         case k2020HFSItem:
  384.         case kHFSConnectorItem:
  385.         case kATSHFSItem:
  386.         case kHFSPagerItem:
  387.         case kHFSHFSItem:
  388.             CreateMailGatewayN(item);
  389.         break;
  390.  
  391.         case kAutostart2020Item:
  392.             ToggleAutostartOption();
  393.             break;
  394.  
  395.         case kForceReconnectItem:
  396.             // extern void PutEmptyBundleIntoOutgoingQueue();
  397.             // PutEmptyBundleIntoOutgoingQueue();
  398.             break;
  399.  
  400.         case kLast2020LetterItem:
  401.             extern void ReenumerateLast2020Letter();
  402.             ReenumerateLast2020Letter();
  403.             break;
  404.  
  405.         case kAll2020LettersItem:
  406.             extern void ReenumerateAll2020Letters();
  407.             ReenumerateAll2020Letters();
  408.             break;
  409.  
  410.         case kForceATSConnectItem:
  411. //             extern void ForceATSToConnectToApplelink();
  412. //             ForceATSToConnectToApplelink();
  413.             break;
  414.  
  415.         case kDescribeHalfGateways:
  416. //            extern void DescribeConnectorHalfGateway();
  417. //            DescribeConnectorHalfGateway();
  418.             break;
  419.         
  420.         case kShowThreadStatus:
  421.             extern void ShowAllThreadStatus ( ostream& );
  422.             ShowAllThreadStatus( keith );
  423.             break;
  424.     }
  425. }
  426.  
  427. /***********************************|****************************************/
  428.  
  429. void HandleFileMenu ( short item )
  430. {
  431.     switch ( item)
  432.     {
  433.         case kFileShowMainWindowItem:
  434.             void ShowMainWindow ();
  435.             ShowMainWindow();
  436.             break;
  437.             
  438.         case kFileShowLogWindowItem:    
  439.             if ( gTranscriptWindow )
  440.                 gTranscriptWindow->Show ();
  441.             break;
  442.  
  443.         case kFileShowToALLetterLog:
  444.             extern void ShowToApplelinkLetterLog ();
  445.             ShowToApplelinkLetterLog();
  446.             break;
  447.             
  448.         case kFileShotToAOCELetterLog:
  449.             extern void ShowToAOCELetterLog ();
  450.             ShowToAOCELetterLog();
  451.             break;
  452.  
  453.         case kFileQuitItem:
  454.             ShutDownGateway ( );
  455.             break;
  456.     }
  457. }
  458.  
  459. /***********************************|****************************************/
  460.  
  461. void ShowMainWindow ()
  462. {
  463.     
  464.     if ( ! gStatusWindow )
  465.         gStatusWindow = new TStatusWindow ( 2000, 2000, & GetCurrentServerLoad );
  466.         
  467.     gStatusWindow->SelectWindow ();
  468.     
  469. };
  470.  
  471. /***********************************|****************************************/
  472.  
  473. void ShowToApplelinkLetterLog () 
  474. {
  475.     // extern TLetterLogWindow* gApplelinkLetterLogWindow;
  476.     
  477.     // if ( gApplelinkLetterLogWindow )
  478.     //    gApplelinkLetterLogWindow->Show();
  479. };
  480.  
  481. /***********************************|****************************************/
  482.  
  483. void ShowToAOCELetterLog ()
  484. {
  485.     extern TLetterLogWindow* gAOCELetterLogWindow;
  486.     
  487.     if ( gAOCELetterLogWindow )
  488.         gAOCELetterLogWindow->Show();
  489. };
  490.  
  491. /***********************************|****************************************/
  492.  
  493. void HandleControlMenu ( short item )
  494. {
  495.     switch ( item)
  496.     {
  497.         case kControlPause:
  498.             SetGatewayPausing ( ! IsGatewayPausing () );
  499.             break;
  500.  
  501.         #if debug
  502.  
  503.         case kControlStep:
  504.             SetGatewayPausing ( true );
  505.             TYield ();
  506.             break;
  507.             
  508.         case kControlShowThreadInfo:
  509.             extern void ShowThreadStatusDialog ();
  510.             ShowThreadStatusDialog ();
  511.             break;
  512.             
  513.         case kControlShowMemoryInfo:
  514.             break;
  515.             
  516.         case kControlShowMemoryInfoOften:
  517.             break;
  518.             
  519.         case kControlForceQuit:
  520.             gReadyToQuit = true;
  521.             break;
  522.  
  523.         #endif
  524.     }
  525. }
  526.  
  527.  
  528. /***********************************|****************************************/
  529.  
  530. void DoMenuCommand(long menuResult)
  531. {
  532.     short menuItem = (short) LowWord (menuResult);
  533.  
  534.     switch ( HighWord (menuResult) )
  535.     {
  536.     case kAppleMenu:
  537.         switch ( menuItem )
  538.         {
  539.             case kDebugAboutItem:
  540.                 ShowAboutDialog ();
  541.             break;
  542.  
  543.             default:
  544.             {
  545.                 Str255 string;
  546.                 GetItem ( GetMHandle ( kAppleMenu ), menuItem, string );
  547.                 OpenDeskAcc ( string );
  548.             }
  549.             break;
  550.         }
  551.         break;
  552.  
  553.     case kFileMenu:
  554.         HandleFileMenu ( menuItem );
  555.         break;
  556.  
  557.     case kEditMenu:
  558.         SystemEdit( menuItem-1);
  559.         break;
  560.  
  561.     case kControlMenu:
  562.         HandleControlMenu ( menuItem );
  563.         break;
  564.  
  565.     case kGatewayMenu:
  566.         HandleGatewayMenu ( menuItem );
  567.         break;
  568.  
  569.     case kConfigMenu:
  570.         if ( gMailGateway )
  571.         {
  572.             switch (menuItem)
  573.             {
  574.                 case kConfigShowConfig:
  575.                     extern void ShowConfigDB();
  576.                     ShowConfigDB();
  577.                     break;
  578.                 case kConfigShowStatus:
  579.                     extern void ShowStatusDB();
  580.                     ShowStatusDB();
  581.                     break;
  582.                 case kConfigSetConfig:
  583.                     extern void DoSetTupleDialog();
  584.                     DoSetTupleDialog();
  585.                     break;
  586.             }
  587.         }
  588.         break;
  589.  
  590.     case kKeithMenu:
  591.         keithFlag.SetFlag ( menuItem, !keithFlag.Flag ( menuItem ) );
  592.         break;
  593.  
  594.     case kSteveMenu:
  595.         steveFlag.SetFlag ( menuItem, !steveFlag.Flag ( menuItem ) );
  596.         break;
  597.  
  598.     case kChrisMenu:
  599.         HandleChrisMenu ( menuItem );
  600.         break;
  601.  
  602.     case kAddressesMenu:
  603.         addressTypesFlag.SetFlag ( menuItem, !addressTypesFlag.Flag ( menuItem ) );
  604.         break;
  605.     }
  606.  
  607.     HiliteMenu(0);
  608. }
  609.  
  610. /***********************************|****************************************/
  611.  
  612. Boolean    HandleDebuggingMenuEvent (EventRecord *event)
  613. {
  614.     Boolean handledIt = false;
  615.     short part;
  616.     WindowPtr window;
  617.     char key;
  618.  
  619.     switch ( event->what )
  620.     {
  621.         case mouseDown:
  622.             part = FindWindow(event->where, &window);
  623.             switch ( part )
  624.             {
  625.                 case inMenuBar:                /* process a mouse menu command (if any) */
  626.                     AdjustMenus();
  627.                     DoMenuCommand(MenuSelect(event->where));
  628.                     handledIt = true;
  629.                     break;
  630.             }
  631.             break;
  632.  
  633.         case keyDown:
  634.         case autoKey:                        /* check for menukey equivalents */
  635.             key = (char) event->message & charCodeMask;
  636.             if ( event->modifiers & cmdKey )            /* Command key down */
  637.                 if ( event->what == keyDown )
  638.                 {
  639.                     AdjustMenus();                        /* enable/disable/check menu items properly */
  640.                     DoMenuCommand(MenuKey(key));
  641.                     handledIt = true;
  642.                 }
  643.             break;
  644.     }
  645.  
  646.     return handledIt;
  647. }
  648.  
  649. /***********************************|****************************************/
  650.